+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
+2000-06-21 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use
+ gtk_get_default_language
+
+ * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language):
+ new function to get the default language
+
+ * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c:
+ s/gtk_text_view_style_values/gtk_text_style_values/
+
+ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h:
+ Add a "language" field to tags.
+
+ (gtk_text_tag_set_arg): Fix bug in setting
+ "bg_full_height_set" tag.
+
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
return gdk_set_locale ();
}
+gchar*
+gtk_get_default_language (void)
+{
+ gchar *lang;
+ gchar *p;
+
+ lang = g_strdup (setlocale (LC_CTYPE, NULL));
+ p = strchr (lang, '.');
+ if (p)
+ *p = '\0';
+ p = strchr (lang, '@');
+ if (p)
+ *p = '\0';
+
+ return lang;
+}
+
void
gtk_main (void)
{
/* Initialization, exit, mainloop and miscellaneous routines
*/
-void gtk_init (int *argc,
- char ***argv);
-gboolean gtk_init_check (int *argc,
- char ***argv);
-void gtk_exit (gint error_code);
-gchar* gtk_set_locale (void);
-gint gtk_events_pending (void);
+
+void gtk_init (int *argc,
+ char ***argv);
+gboolean gtk_init_check (int *argc,
+ char ***argv);
+void gtk_exit (gint error_code);
+gchar* gtk_set_locale (void);
+gchar* gtk_get_default_language (void);
+gint gtk_events_pending (void);
+
+
/* The following is the event func GTK+ registers with GDK
* we expose it mainly to allow filtering of events between
{
if (text_layout->one_style_cache)
{
- gtk_text_view_style_values_unref (text_layout->one_style_cache);
+ gtk_text_style_values_unref (text_layout->one_style_cache);
text_layout->one_style_cache = NULL;
}
}
gtk_text_layout_set_buffer (layout, NULL);
if (layout->default_style)
- gtk_text_view_style_values_unref (layout->default_style);
+ gtk_text_style_values_unref (layout->default_style);
layout->default_style = NULL;
if (layout->ltr_context)
if (values == layout->default_style)
return;
- gtk_text_view_style_values_ref (values);
+ gtk_text_style_values_ref (values);
if (layout->default_style)
- gtk_text_view_style_values_unref (layout->default_style);
+ gtk_text_style_values_unref (layout->default_style);
layout->default_style = values;
*/
if (layout->one_style_cache != NULL)
{
- gtk_text_view_style_values_ref (layout->one_style_cache);
+ gtk_text_style_values_ref (layout->one_style_cache);
return layout->one_style_cache;
}
{
/* One ref for the return value, one ref for the
layout->one_style_cache reference */
- gtk_text_view_style_values_ref (layout->default_style);
- gtk_text_view_style_values_ref (layout->default_style);
+ gtk_text_style_values_ref (layout->default_style);
+ gtk_text_style_values_ref (layout->default_style);
layout->one_style_cache = layout->default_style;
if (tags)
/* Sort tags in ascending order of priority */
gtk_text_tag_array_sort (tags, tag_count);
- style = gtk_text_view_style_values_new ();
+ style = gtk_text_style_values_new ();
- gtk_text_view_style_values_copy (layout->default_style,
- style);
+ gtk_text_style_values_copy (layout->default_style,
+ style);
- gtk_text_view_style_values_fill_from_tags (style,
- tags,
- tag_count);
+ gtk_text_style_values_fill_from_tags (style,
+ tags,
+ tag_count);
g_free (tags);
/* Leave this style as the last one seen */
g_assert (layout->one_style_cache == NULL);
- gtk_text_view_style_values_ref (style); /* ref held by layout->one_style_cache */
+ gtk_text_style_values_ref (style); /* ref held by layout->one_style_cache */
layout->one_style_cache = style;
/* Returning yet another refcount */
g_return_if_fail (style != NULL);
g_return_if_fail (style->refcount > 0);
- gtk_text_view_style_values_unref (style);
+ gtk_text_style_values_unref (style);
}
/*
ARG_UNDERLINE,
ARG_OFFSET,
ARG_BG_FULL_HEIGHT,
+ ARG_LANGUAGE,
/* Whether-a-style-arg-is-set args */
ARG_BACKGROUND_SET,
ARG_UNDERLINE_SET,
ARG_OFFSET_SET,
ARG_BG_FULL_HEIGHT_SET,
+ ARG_LANGUAGE_SET,
LAST_ARG
};
GTK_ARG_READWRITE, ARG_OFFSET);
gtk_object_add_arg_type ("GtkTextTag::background_full_height", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BG_FULL_HEIGHT);
-
+ gtk_object_add_arg_type ("GtkTextTag::language", GTK_TYPE_STRING,
+ GTK_ARG_READWRITE, ARG_LANGUAGE);
+
/* Style args are set or not */
gtk_object_add_arg_type ("GtkTextTag::background_set", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BACKGROUND_SET);
GTK_ARG_READWRITE, ARG_OFFSET_SET);
gtk_object_add_arg_type ("GtkTextTag::background_full_height_set", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BG_FULL_HEIGHT_SET);
+ gtk_object_add_arg_type ("GtkTextTag::language_set", GTK_TYPE_BOOL,
+ GTK_ARG_READWRITE, ARG_LANGUAGE_SET);
signals[EVENT] =
gtk_signal_new ("event",
tag->name = g_strdup(name);
- tag->values = gtk_text_view_style_values_new();
+ tag->values = gtk_text_style_values_new();
return tag;
}
g_assert(tkxt_tag->table == NULL);
- gtk_text_view_style_values_unref(tkxt_tag->values);
+ gtk_text_style_values_unref(tkxt_tag->values);
tkxt_tag->values = NULL;
-
+
(* GTK_OBJECT_CLASS(parent_class)->destroy) (object);
}
tkxt_tag->values->bg_full_height = GTK_VALUE_BOOL(*arg);
break;
+ case ARG_LANGUAGE:
+ tkxt_tag->language_set = TRUE;
+ tkxt_tag->values->language = g_strdup (GTK_VALUE_STRING(*arg));
+ break;
/* Whether the value should be used... */
break;
case ARG_BG_FULL_HEIGHT_SET:
- tkxt_tag->bg_full_height_set = TRUE;
- tkxt_tag->values->bg_full_height = GTK_VALUE_BOOL(*arg);
+ tkxt_tag->bg_full_height_set = GTK_VALUE_BOOL(*arg);
+ break;
+
+ case ARG_LANGUAGE_SET:
+ tkxt_tag->language_set = GTK_VALUE_BOOL(*arg);
+ size_changed = TRUE;
break;
default:
case ARG_BG_FULL_HEIGHT:
GTK_VALUE_BOOL(*arg) = tag->values->bg_full_height;
break;
+
+ case ARG_LANGUAGE:
+ GTK_VALUE_STRING(*arg) = g_strdup (tag->values->language);
+ break;
case ARG_BACKGROUND_SET:
case ARG_BACKGROUND_GDK_SET:
case ARG_BG_FULL_HEIGHT_SET:
GTK_VALUE_BOOL(*arg) = tag->bg_full_height_set;
break;
+
+ case ARG_LANGUAGE_SET:
+ GTK_VALUE_BOOL(*arg) = tag->language_set;
+ break;
case ARG_BACKGROUND:
case ARG_FOREGROUND:
*/
GtkTextStyleValues*
-gtk_text_view_style_values_new(void)
+gtk_text_style_values_new(void)
{
GtkTextStyleValues *values;
/* 0 is a valid value for most of the struct */
values->refcount = 1;
+
+ values->language = gtk_get_default_language ();
return values;
}
void
-gtk_text_view_style_values_copy(GtkTextStyleValues *src,
- GtkTextStyleValues *dest)
+gtk_text_style_values_copy(GtkTextStyleValues *src,
+ GtkTextStyleValues *dest)
{
guint orig_refcount;
*dest = *src;
dest->font_desc = pango_font_description_copy (src->font_desc);
-
+ dest->language = g_strdup (src->language);
+
dest->refcount = orig_refcount;
dest->realized = FALSE;
}
void
-gtk_text_view_style_values_ref(GtkTextStyleValues *values)
+gtk_text_style_values_ref(GtkTextStyleValues *values)
{
g_return_if_fail(values != NULL);
}
void
-gtk_text_view_style_values_unref(GtkTextStyleValues *values)
+gtk_text_style_values_unref(GtkTextStyleValues *values)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
if (values->tab_array)
gtk_text_view_tab_array_unref(values->tab_array);
+
+ if (values->language)
+ g_free (values->language);
g_free(values);
}
}
void
-gtk_text_view_style_values_realize(GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual)
+gtk_text_style_values_realize(GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
}
void
-gtk_text_view_style_values_unrealize(GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual)
+gtk_text_style_values_unrealize(GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
}
void
-gtk_text_view_style_values_fill_from_tags(GtkTextStyleValues *dest,
- GtkTextTag** tags,
- guint n_tags)
+gtk_text_style_values_fill_from_tags(GtkTextStyleValues *dest,
+ GtkTextTag** tags,
+ guint n_tags)
{
guint n = 0;
if (tag->bg_full_height_set)
dest->bg_full_height = vals->bg_full_height;
+
+ if (tag->language_set)
+ {
+ g_free (dest->language);
+ dest->language = g_strdup (vals->language);
+ }
++n;
}
guint bg_full_height_set : 1;
guint elide_set : 1;
guint editable_set : 1;
+ guint language_set : 1;
guint pad1 : 1;
guint pad2 : 1;
guint pad3 : 1;
- guint pad4 : 1;
};
struct _GtkTextTagClass {
* the defaults with settings in the given tags, which should be sorted in
* ascending order of priority
*/
-void gtk_text_view_style_values_fill_from_tags (GtkTextStyleValues *values,
- GtkTextTag **tags,
- guint n_tags);
-void gtk_text_tag_array_sort (GtkTextTag **tag_array_p,
- guint len);
+void gtk_text_style_values_fill_from_tags (GtkTextStyleValues *values,
+ GtkTextTag **tags,
+ guint n_tags);
+void gtk_text_tag_array_sort (GtkTextTag **tag_array_p,
+ guint len);
/*
* Style object created by folding a set of tags together
* GTK_WRAPMODE_NONE, GTK_WRAPMODE_WORD
*/
+ gchar *language;
+
/* hide the text */
guint elide : 1;
guint pad4 : 1;
};
-GtkTextStyleValues *gtk_text_view_style_values_new (void);
-void gtk_text_view_style_values_copy (GtkTextStyleValues *src,
- GtkTextStyleValues *dest);
-void gtk_text_view_style_values_unref (GtkTextStyleValues *values);
-void gtk_text_view_style_values_ref (GtkTextStyleValues *values);
+GtkTextStyleValues *gtk_text_style_values_new (void);
+void gtk_text_style_values_copy (GtkTextStyleValues *src,
+ GtkTextStyleValues *dest);
+void gtk_text_style_values_unref (GtkTextStyleValues *values);
+void gtk_text_style_values_ref (GtkTextStyleValues *values);
/* ensure colors are allocated, etc. for drawing */
-void gtk_text_view_style_values_realize (GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual);
+void gtk_text_style_values_realize (GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual);
/* free the stuff again */
-void gtk_text_view_style_values_unrealize (GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual);
+void gtk_text_style_values_unrealize (GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual);
#endif
g_object_unref (G_OBJECT (ltr_context));
g_object_unref (G_OBJECT (rtl_context));
- style = gtk_text_view_style_values_new ();
+ style = gtk_text_style_values_new ();
gtk_widget_ensure_style (widget);
gtk_text_view_set_values_from_style (text_view, style, widget->style);
gtk_text_layout_set_default_style (text_view->layout, style);
- gtk_text_view_style_values_unref (style);
+ gtk_text_style_values_unref (style);
}
}
gtk_widget_create_pango_context (GtkWidget *widget)
{
PangoContext *context;
- char *lang, *p;
+ char *lang;
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL);
pango_context_set_font_description (context, widget->style->font_desc);
- lang = g_strdup (setlocale (LC_CTYPE, NULL));
- p = strchr (lang, '.');
- if (p)
- *p = '\0';
- p = strchr (lang, '@');
- if (p)
- *p = '\0';
-
+ lang = gtk_get_default_language ();
pango_context_set_lang (context, lang);
g_free (lang);